#Python的一个内置函数id()，通过这个函数可以获取某一个变量所在的内存地址，例如下面这个实例：
import sys

import numpy as np
# year = 2024
# print(year)
# print(id(year))
#
# year = 2025
# print(year)
# print(id(year))

# print(sys.getrefcount(2021)) # 输出为3
#
# year = 2021
# print(sys.getrefcount(2021)) # 输出为4
#
# height = 2021
# print(sys.getrefcount(2021)) # 输出为5
#
# del year
# print(sys.getrefcount(2021)) # 输出为4

#从上述代码可以看出变量值2021的引用计数由于每一次赋予新的变量名，引用计数都会增加
# 而当我们利用del关键字删除变量值2021的一个变量名year时，引用计数则会减少。

#变量被创建，变量值引用计数加1
# 变量被引用，变量值引用计数加1#
# 变量作为参数传入到一个函数，变量值引用计数加2

# 引用计数初始值为3
# print(sys.getrefcount(2021)) # 输出为3
#
# # 变量被创建，变量值引用计数加1
# year = 2021
# print(sys.getrefcount(2021)) # 输出为4
#
# # 变量被引用，变量值引用计数加1
# height = year
# print(sys.getrefcount(2021)) # 输出为5
#
# # 变量作为参数传入到一个函数，变量值引用计数加2
# def func(year):
#     print(sys.getrefcount(year))
#
# func(year) # 输出为7

#Python中既然有增加引用计数的方法， 也当然会减少引用计数的方法，共有以下4种：

# 变量值对应的变量名被销毁
# 变量值对应的变量名被赋予新的值
# 变量值对应的变量名离开它的作用域
# 变量值对应的变量名的容器被销毁


print(sys.getrefcount(2021)) # 输出为3

year = 2021
print(sys.getrefcount(2021)) # 输出为4
print(id(year)) # 输出4499932720
print(year) # 输出2021

year = 2022
print(sys.getrefcount(2021)) # 输出为3
print(id(year)) # 输出4499932560
print(year) # 输出2022